home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 24 / Mac Magazin and MacEasy Magazine CD - Issue 24.iso / Online / clip2gif 0.7.2 / Calling clip2gif from C / LoadClip2Gif.c < prev    next >
Text File  |  1995-12-20  |  3KB  |  92 lines

  1. /*
  2.  *    LoadClip2Gif.c
  3.  *
  4.  *    Copyright 1995, Yves Piguet. All rights reserved.
  5.  */
  6.  
  7. #include <CodeFragments.h>
  8. #include "LoadClip2Gif.h"
  9.  
  10. short (*GetVersionNumber)(void);
  11. OSErr (*BeginOffscreen)(Offscreen *, short, short, short, CTabHandle);
  12. OSErr (*DisposeOffscreen)(Offscreen *);
  13. OSErr (*ConvertFileToPict)(PicHandle, Handle *);
  14. OSErr (*ConvertPictToGIFFile)(PicHandle, FSSpec *, short, RGBColor *, short, CTabHandle);
  15. OSErr (*ConvertPictToGIFHandle)(PicHandle, Handle *, short, RGBColor *, short, CTabHandle);
  16. OSErr (*ConvertPixmapToGIFHandle)(PixMapHandle, Handle *, short, RGBColor *);
  17. OSErr (*ConvertPixmapToGIFFile)(PixMapHandle, FSSpec *, short, RGBColor *);
  18. OSErr (*ConvertPictToJPEGHandle)(PicHandle, Handle *, short, short);
  19. OSErr (*ConvertPictToJPEGFile)(PicHandle, FSSpec *, short, short);
  20. OSErr (*ConvertPictToTIFFHandle)(PicHandle, Handle *, short, short);
  21. OSErr (*ConvertPictToTIFFFile)(PicHandle, FSSpec *, short, short);
  22. OSErr (*GetScreen)(Rect *, PicHandle *);
  23.  
  24. #define ResolveSymbol(name,addr) do { \
  25.     err = FindSymbol(connID, name, (Ptr*)&addr, &symClass); \
  26.     if (err != noErr) \
  27.         return err; \
  28.     } while(0)
  29.  
  30. OSErr LoadClip2Gif(void)
  31. {
  32.     DTPBRec paramBlock;
  33.     long dirID;    // ignored (used by HGetVol)
  34.     Str63 appName;
  35.     FSSpec spec;
  36.     OSErr err;
  37.     ConnectionID connID;
  38.     Ptr mainAddr;
  39.     Str255 errName;
  40.     SymClass symClass;
  41.     
  42.     // first checks in the same folder, so that older versions of clip2gif can be
  43.     // kept on the same volume
  44.     
  45.     err = FSMakeFSSpec(0, 0, "\pclip2gif", &spec);
  46.     
  47.     if (err != noErr)    // not here; uses the Desktop Database
  48.     {
  49.         err = HGetVol(0L, ¶mBlock.ioVRefNum, &dirID);
  50.         paramBlock.ioNamePtr = appName;
  51.         err = PBDTGetPath(¶mBlock);
  52.         if (err != noErr)
  53.             return err;
  54.         
  55.         paramBlock.ioCompletion = 0L;
  56.         paramBlock.ioNamePtr = appName;
  57.         paramBlock.ioIndex = 0;
  58.         paramBlock.ioFileCreator = 'c2gf';
  59.         err = PBDTGetAPPL(¶mBlock, 0);
  60.         if (err != noErr)
  61.             return err;
  62.         err = FSMakeFSSpec(0, paramBlock.ioAPPLParID, paramBlock.ioNamePtr, &spec);
  63.     }
  64.         
  65.     if (err != noErr)
  66.         return err;
  67.     
  68.     err = GetDiskFragment(&spec, 0, kWholeFork, "\pclip2gif",
  69.                     kLoadLib, &connID, &mainAddr, errName);
  70.     if (err != noErr)
  71.         return err;
  72.     
  73.     ResolveSymbol("\pGetVersionNumber", GetVersionNumber);
  74.     ResolveSymbol("\pBeginOffscreen", BeginOffscreen);
  75.     ResolveSymbol("\pDisposeOffscreen", DisposeOffscreen);
  76.     ResolveSymbol("\pConvertFileToPict", ConvertFileToPict);
  77.     ResolveSymbol("\pConvertPictToGIFHandle", ConvertPictToGIFHandle);
  78.     ResolveSymbol("\pConvertPictToGIFFile", ConvertPictToGIFFile);
  79.     ResolveSymbol("\pConvertPixmapToGIFHandle", ConvertPixmapToGIFHandle);
  80.     ResolveSymbol("\pConvertPixmapToGIFFile", ConvertPixmapToGIFFile);
  81.     ResolveSymbol("\pConvertPictToJPEGHandle", ConvertPictToJPEGHandle);
  82.     ResolveSymbol("\pConvertPictToJPEGFile", ConvertPictToJPEGFile);
  83.     ResolveSymbol("\pConvertPictToTIFFHandle", ConvertPictToTIFFHandle);
  84.     ResolveSymbol("\pConvertPictToTIFFFile", ConvertPictToTIFFFile);
  85.     ResolveSymbol("\pGetScreen", GetScreen);
  86.     
  87.     if (GetVersionNumber() != 71)
  88.         return envBadVers;
  89.     
  90.     return noErr;
  91. }
  92.